/**
 * Copyright 2006 gworks.com.au
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License. (http://www.apache.org/licenses/LICENSE-2.0)
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed 
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
 * the specific language governing permissions and limitations under the License.
 *
 * <dhamma-message src="Atisha (11th century Tibetan Buddhist master)">
 * 	The greatest achievement is selflessness. The greatest worth is self-mastery.
 * 	The greatest quality is seeking to serve others. The greatest precept is continual awareness.
 * 	The greatest medicine is the emptiness of everything. The greatest action is not conforming with the worlds ways.
 * 	The greatest magic is transmuting the passions. The greatest generosity is non-attachment.
 * 	The greatest goodness is a peaceful mind. The greatest patience is humility.
 * 	The greatest effort is not concerned with results. The greatest meditation is a mind that lets go.
 * 	The greatest wisdom is seeing through appearances. 
 * </dhamma-message>
 */
package au.com.gworks.jump.app.wiki.client.navigation;

import java.util.ArrayList;

import org.javaongems.client.rt.io.PathUtils;
import org.javaongems.client.winctrls.BreadcrumbBar;

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;

public class ExplorerToolbar extends Composite {
	static public interface ToolbarListener {
	}
	
	private HorizontalPanel outer = new HorizontalPanel();
	private BreadcrumbBar breadcrumbs = new BreadcrumbBar();
	private ToolbarListener listener;
	private ExplorerController 	controller;
	
	public ExplorerToolbar(ExplorerController ctrlr) {
		controller = ctrlr;
		initWidget(outer);
		initialiseLayout();
		initialiseWidgets();
	}
	
	private void initialiseLayout() {
		outer.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
		outer.add(breadcrumbs);
	}
	
	public void setFolderPath(String folderPath) {
		breadcrumbs.clearAll();
		buildBreadCrumbs(folderPath);
	}
	
	public void setToolbarListener(ToolbarListener lsnr) {
		listener = lsnr;
	}
	
	private void initialiseWidgets() {
		breadcrumbs.setAddSignPosts(true);
		breadcrumbs.setListener(controller);
	}

	private void buildBreadCrumbs(String folderPath) {
		ArrayList[] crumbRefs = tokeniseCrumbs(folderPath);
		int sz = crumbRefs[0].size();
		for (int i = 0; i < sz; i++) {
			String crumbs = (String) crumbRefs[0].get(i);
			String ref    = (String) crumbRefs[1].get(i);
			breadcrumbs.addCrumb(crumbs, ref);
		}
	}

	private ArrayList[] tokeniseCrumbs(String folderPath) {
		ArrayList[] ret = new ArrayList[2];
		ret[0] = new ArrayList();
		ret[1] = new ArrayList();
		folderPath = PathUtils.appendSlashIfRequired(folderPath);
		ret[0].add("Top");
		ret[1].add(PathUtils.FORWARD_SLASH);
		int lastPos = 1;
		int folderPathLen = folderPath.length();
		if (folderPathLen > 1) {
			for (int i = lastPos; i < folderPathLen; i++) {
				char c = folderPath.charAt(i);
				if (c == PathUtils.FORWARD_SLASH_CHAR) {
					String name = folderPath.substring(lastPos, i);
					String ref = folderPath.substring(0, i);
					ref = PathUtils.appendSlashIfRequired(ref);
					ret[0].add(name);
					ret[1].add(ref);
					lastPos = i + 1;
				}
			}
		}
		return ret;
	}
}